#pragma once
#include <d3dx9.h>

	struct VERTEX
	{

	};

	struct VERTEXPOSCOL :
		public VERTEX
	{
		D3DXVECTOR3 pos;
		DWORD colour;

		VERTEXPOSCOL()
			:pos(0.0f, 0.0f, 0.0f), colour(0x00000000){}

		VERTEXPOSCOL(float x, float y, float z, D3DXCOLOR c)
			:pos(x, y, z), colour(c){}

		VERTEXPOSCOL(const D3DXVECTOR3& p, D3DXCOLOR c)
			:pos(p), colour(c){}

		static const DWORD GetFVF()
		{
			return (D3DFVF_XYZ|D3DFVF_DIFFUSE);
		}
	};

	struct VERTEXPOSNOR :
		public VERTEX
	{
		D3DXVECTOR3 pos;
		D3DXVECTOR3 normal;

		VERTEXPOSNOR() 
			: pos(0.0f, 0.0f, 0.0f), normal(0.0f, 0.0f, 0.0f){}

		VERTEXPOSNOR(float x, float y, float z, float nx, float ny, float nz) 
			: pos(x, y, z), normal(nx,ny, nz){}

		VERTEXPOSNOR(const D3DXVECTOR3& p, const D3DXVECTOR3& norm)
			: pos(p), normal(norm){}

		static const DWORD GetFVF()
		{
			return (D3DFVF_XYZ|D3DFVF_NORMAL);
		}
	};

	struct VERTEXPOSUV :
		public VERTEX
	{
		D3DXVECTOR3 pos;
		D3DXVECTOR2 UV;	

		VERTEXPOSUV() 
			: pos(0, 0, 0), UV(0, 0){}

		VERTEXPOSUV(float x, float y, float z, float coordX, float coordY)
			:pos(x, y, z), UV(coordX, coordY){}

		VERTEXPOSUV(float x, float y, float z, D3DXVECTOR2 coord)
			:pos(x, y, z), UV(coord){}


		static const DWORD GetFVF()
		{
			return (D3DFVF_XYZ | D3DFVF_TEX1 );
		}
	};

	struct VERTEXPOSUVNOR :
		public VERTEX
	{
		D3DXVECTOR3 pos;
		D3DXVECTOR2 UV;	
		D3DXVECTOR3 normal;

		VERTEXPOSUVNOR() 
			: pos(0, 0, 0), UV(0, 0){}

		VERTEXPOSUVNOR(float x, float y, float z, float coordX, float coordY)
			:pos(x, y, z), UV(coordX, coordY){}

		VERTEXPOSUVNOR(float x, float y, float z, D3DXVECTOR2 coord)
			:pos(x, y, z), UV(coord){}


		static const DWORD GetFVF()
		{
			return (D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_NORMAL);
		}
	};

